使用react-navigation的StackNavigator跳转页面时,有给页面设置初始化props的需求。根据应用场景不同,本文总结了三种方式:
场景一:所有页面设置初始props
如果要为所有页面设置初始props,且应用程序最外层的导航是StackNavigator,直接用screenProps即可。对官方文档摘录如下:
在页面中使用this.props.screenProps
即可获取screenProps的内容。
场景二:子StackNavigator下的所有页面设置初始props
这种场景更为常见。多个StackNavigator嵌套时,如果要为子StackNavigator下所有页面设置初始props,同样使用screenProps这个属性,但需参照以下写法:
首先定义了一个函数setScreenProps
,为StackNavigator添加screenProps属性。然后在outerStack的定义中,使用这个函数做跳转入口。
这样设置之后,innerStack下的所有页面,都可以使用this.props.screenProps
获取screenProps的内容。
场景三:某个特定页面设置初始props
这种场景无需使用screenProps,直接添加组件的属性即可,代码示例如下:
this.props.myProp
就可以获取设置的属性。注意,必须参照上述代码。踩过的坑有:
screen: <SomeScreenView myProp="value" />
直接输出RN组件,会报错。react-navigation在此处有校验,必须传入一个函数。(ES6的class本质也是函数)screen: () => <SomeScreenView myProp="value" />
这种写法,SomeScreenView将没有navigation。
参考资料
以上内容参考 react-navigation github的issue。当学习使用新的、快速发展的技术时,github的issue比Google和Stack Overflow好用一百倍!